home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / slaveanims < prev    next >
Text File  |  1997-01-31  |  10KB  |  693 lines

  1.  
  2. realtab:
  3.  dc.l prot1-78935450
  4.  dc.l prot2-78935450
  5.  dc.l prot3-78935450
  6.  dc.l prot4-78935450
  7.  dc.l prot5-78935450
  8.  dc.l prot6-78935450
  9.  dc.l prot7-78935450
  10.  dc.l prot8-78935450
  11.  dc.l prot9-78935450
  12.  dc.l protA-78935450
  13.  
  14. objvels: ds.l 8
  15. Conditions: dc.w 0
  16.  
  17. Robotanimpos:
  18.  dc.w 0
  19. Robotarmpos
  20.  dc.w 0
  21. clump: dc.w 0
  22.  
  23. SLAVERobotWalk:
  24.  move.l #RobotPts+2,a0
  25.  move.l #Robotanim,a1
  26.  move.w Robotanimpos(pc),d0
  27.  
  28.  clr.b clump
  29.  adda.w d0,a1
  30.  
  31.  move.w #(38*3)-1,d0
  32. putinpts:
  33.  move.w (a1)+,(a0)+
  34.  dbra d0,putinpts
  35.  
  36.  
  37.  move.l #RightArm,a0
  38.  move.l #Armanim,a1
  39.  move.w Robotarmpos(pc),d0
  40.  adda.w d0,a1
  41.  move.w #(14*3)-1,d0
  42. putinpts2:
  43.  move.w (a1)+,(a0)+
  44.  dbra d0,putinpts2
  45.  
  46.  move.l #Robot_MainBody,a0
  47.  move.l #BodyPlace+2,a1
  48.  move.w (a0)+,d0
  49.  move.w RobotPts+4+14*6,d1
  50.  add.w RobotPts+4+22*6,d1
  51.  asr.w #1,d1
  52.  
  53. putinheights:
  54.  move.w (a0)+,d2
  55.  add.w d1,d2
  56.  move.w d2,(a1)
  57.  addq #6,a1
  58.  dbra d0,putinheights
  59.  
  60.  move.w visxpos,d0
  61.  add.w visxdir,d0
  62.  cmp.w #24,d0
  63.  blt.s okvisr
  64.  move.w #-4,visxdir
  65. okvisr
  66.  cmp.w #-24,d0
  67.  bgt.s okvisl
  68.  move.w #4,visxdir
  69. okvisl:
  70.  move.w d0,visxpos
  71.  
  72.  move.l #VISOR,a0
  73.  add.w #64,d0
  74.  move.b d0,6(a0)
  75.  move.b d0,18(a0)
  76.  move.b d0,22(a0)
  77.  add.b #63,d0
  78.  move.b d0,10(a0)
  79.  move.b d0,14(a0)
  80.  
  81.  rts
  82.  
  83. visxpos: dc.w 0
  84. visxdir: dc.w 4
  85.  
  86. FramesToDraw: dc.w 0
  87. TempFrames: dc.w 0
  88.  
  89. SLAVEANIM:
  90.  
  91.  move.l PLR1_Roompt,a0
  92.  move.w (a0),PLR1_Zone
  93.  move.l PLR2_Roompt,a0
  94.  move.w (a0),PLR2_Zone
  95.  
  96.  bsr SLAVESwitchRoutine
  97.  bsr SLAVEDoorRoutine
  98.  bsr SLAVELiftRoutine
  99. ; bsr ObjectHandler
  100.  bsr SLAVERobotWalk
  101.  
  102.  rts
  103.  
  104. ******************************
  105.  
  106. tstdir: dc.w 0
  107.  
  108. liftheighttab: ds.w 20
  109. doorheighttab: ds.w 20
  110. stoodonlift: dc.b 0
  111. liftattop: dc.b 0
  112. liftatbot: dc.b 0
  113. ZoneBrightTable:
  114.  ds.l 300
  115.  
  116.  even
  117. SLAVELiftRoutine:
  118.  
  119.  move.l LiftData,a0
  120.  move.l #liftheighttab,a6
  121.  
  122. doalift:
  123.  
  124.  move.w (a0)+,d0    ; bottom of lift movement
  125.  cmp.w #999,d0
  126.  bne notallliftsdone
  127.  move.w #999,(a6)
  128.  rts
  129. notallliftsdone:
  130.  move.w (a0)+,d1    ; top of lift movement.
  131.  
  132.  move.w (a0),d3
  133.  move.w d3,(a6)+
  134.  move.w 2(a0),d2
  135.  move.w d2,d7
  136.  muls TempFrames,d2
  137.  add.w d2,d3
  138.  move.w 2(a0),d2
  139.  cmp.w d3,d0
  140.  sle.s liftatbot
  141.  bgt.s .nolower
  142.  moveq #0,d2
  143.  move.w d0,d3
  144. .nolower:
  145.  
  146.  cmp.w d3,d1
  147.  sge.s liftattop
  148.  blt.s .noraise
  149.  moveq #0,d2
  150.  move.w d1,d3
  151. .noraise:
  152.  
  153.  sub.w d3,d0
  154.  cmp.w #15*16,d0
  155.  slt d6
  156.  
  157.  move.w d3,(a0)+
  158.  move.l a0,a5
  159.  move.w d2,(a0)+
  160.  move.w d2,d7
  161.  
  162.  move.l (a0)+,a1
  163.  add.l #LEVELGRAPHICS,a1
  164.  asr.w #2,d3
  165.  move.w d3,d0
  166.  asl.w #2,d0
  167.  move.w d0,2(a1)
  168.  move.w d3,d0
  169.  muls #256,d3
  170.  move.w (a0)+,d5
  171.  move.l ZoneAdds,a1
  172.  move.l (a1,d5.w*4),a1
  173.  add.l #LEVELDATA,a1
  174.  move.w (a1),d5
  175.  move.l PLR1_Roompt,a3
  176.  move.l d3,2(a1)
  177.  and.w #63,d0
  178.  neg.w d0
  179.  add.w #64,d0
  180.  
  181.  cmp.w (a3),d5
  182.  sne.s stoodonlift
  183.  
  184.  move.w (a0)+,d2    ; conditions
  185.  and.w Conditions,d2
  186.  cmp.w -2(a0),d2
  187.  beq.s .satisfied 
  188.  
  189.  move.w (a0)+,d5
  190.  
  191. .dothesimplething:
  192.  move.l FloorLines,a3
  193. .simplecheck:
  194.  move.w (a0)+,d5
  195.  blt nomoreliftwalls
  196.  asl.w #4,d5
  197.  lea (a3,d5.w),a4
  198.  move.w #0,14(a4)
  199.  move.l (a0)+,a1
  200.  add.l #LEVELGRAPHICS,a1
  201.  move.l (a0)+,a2
  202.  adda.w d0,a2
  203.  move.l a2,10(a1)
  204.  move.l d3,20(a1)
  205.  bra.s .simplecheck
  206.  bra nomoreliftwalls 
  207.  
  208. .satisfied:
  209.  
  210.  move.l FloorLines,a3
  211.  moveq #0,d4
  212.  moveq #0,d5
  213.  move.b (a0)+,d4
  214.  move.b (a0)+,d5
  215.  tst.b liftattop
  216.  bne tstliftlower
  217.  tst.b liftatbot
  218.  bne tstliftraise
  219.  
  220. backfromlift
  221.  
  222. liftwalls:
  223.  move.w (a0)+,d5
  224.  blt nomoreliftwalls
  225.  
  226.  asl.w #4,d5
  227.  lea (a3,d5.w),a4
  228.  move.w 14(a4),d4
  229.  move.w #0,14(a4)
  230.  and.w d1,d4
  231.  cmp.w d1,d4
  232.  bne.s .nothinghit
  233.  move.w d7,(a5)
  234.  move.w #0,Noisex
  235.  move.w #0,Noisez
  236.  move.w #50,Noisevol
  237.  move.w #5,Samplenum
  238.  move.b #1,chanpick
  239.  st notifplaying
  240.  move.b #$fe,IDNUM
  241.  movem.l a0/a3/a4/d0/d1/d2/d3/d6/d7,-(a7)
  242.  jsr MakeSomeNoise
  243.  movem.l (a7)+,a0/a3/a4/d0/d1/d2/d3/d6/d7
  244. .nothinghit:
  245.  move.l (a0)+,a1
  246.  add.l #LEVELGRAPHICS,a1
  247.  move.l (a0)+,a2
  248.  adda.w d0,a2
  249.  move.l a2,10(a1)
  250.  move.l d3,20(a1)
  251.  bra liftwalls
  252.  
  253. nomoreliftwalls 
  254.  bra doalift
  255.  
  256.  rts
  257.  
  258. tstliftlower:
  259.  cmp.b #1,d5
  260.  blt.s lift0
  261.  beq.s lift1
  262.  cmp.b #3,d5
  263.  blt.s lift2
  264.  beq.s lift3
  265.  
  266. lift0:
  267.  tst.b SPCTAP
  268.  bne.s lift1
  269.  move.w #$ffff,d1
  270.  bra backfromlift
  271.  
  272. lift1:
  273.  move.w #0,d1
  274.  tst.b stoodonlift
  275.  beq.s lift1b
  276.  move.w #%100000000,d1
  277. lift1b:
  278.  move.w #4,d7
  279.  bra backfromlift
  280.  
  281.  
  282. lift2:
  283.  move.w #0,d1
  284.  move.w #4,d7
  285.  bra backfromlift
  286.  
  287. lift3:
  288.  move.w #$ffff,d1
  289.  bra backfromlift
  290.  
  291. tstliftraise:
  292.  cmp.b #1,d4
  293.  blt.s rlift0
  294.  beq.s rlift1
  295.  cmp.b #3,d4
  296.  blt.s rlift2
  297.  beq.s rlift3
  298.  
  299. rlift0:
  300.  tst.b SPCTAP
  301.  bne.s rlift1
  302.  move.w #$ffff,d1
  303.  bra backfromlift
  304.  
  305. rlift1:
  306.  tst.b stoodonlift
  307.  bne.s rlift3
  308.  move.w #0,d1
  309.  move.w #-4,d7
  310.  bra backfromlift
  311.  
  312. rlift2:
  313.  move.w #0,d1
  314.  move.w #-4,d7
  315.  bra backfromlift
  316.  
  317. rlift3:
  318.  move.w #$ffff,d1
  319.  bra backfromlift
  320.  
  321.  
  322. animtimer: dc.w 2
  323.  
  324.  
  325. doordir: dc.w -1
  326. doorpos: dc.w -9
  327. dooropen: dc.b 0
  328. doorclosed: dc.b 0 
  329.  
  330.  even 
  331. SLAVEDoorRoutine:
  332.  
  333.  move.l #doorheighttab,a6
  334.  move.l DoorData,a0
  335.  
  336. doadoor:
  337.  
  338.  move.w (a0)+,d0    ; bottom of door movement
  339.  cmp.w #999,d0
  340.  bne notalldoorsdone
  341.  move.w #999,(a6)+
  342.  rts
  343. notalldoorsdone:
  344.  move.w (a0)+,d1    ; top of door movement.
  345.  
  346.  move.w (a0),d3
  347.  move.w d3,(a6)+
  348.  move.w 2(a0),d2
  349.  muls TempFrames,d2
  350.  add.w d2,d3
  351.  move.w 2(a0),d2
  352.  cmp.w d3,d0
  353.  sle.s doorclosed
  354.  bgt.s nolower
  355.  moveq #0,d2
  356. nolower:
  357.  
  358.  cmp.w d3,d1
  359.  sge.s dooropen
  360.  blt.s noraise
  361.  moveq #0,d2
  362.  move.w d1,d3
  363. noraise:
  364.  
  365.  sub.w d3,d0
  366.  cmp.w #15*16,d0
  367.  sge d6
  368.  
  369.  move.w d3,(a0)+
  370.  move.l a0,a5
  371.  move.w d2,(a0)+
  372.  move.w d2,d7
  373.  
  374.  move.l (a0)+,a1
  375.  add.l #LEVELGRAPHICS,a1
  376.  asr.w #2,d3
  377.  move.w d3,d0
  378.  asl.w #2,d0
  379.  move.w d0,2(a1)
  380.  move.w d3,d0
  381.  muls #256,d3
  382.  move.l ZoneAdds,a1
  383.  move.w (a0)+,d5
  384.  
  385.  
  386.  move.l (a1,d5.w*4),a1
  387.  add.l #LEVELDATA,a1
  388.  move.l d3,6(a1)
  389.  and.w #63,d0
  390.  neg.w d0
  391.  add.w #64,d0
  392.  
  393.  cmp.w PLR1_Zone,d5
  394.  bne.s NotGoBackUp
  395.  tst.w d2
  396.  blt.s NotGoBackUp
  397.  move.w #-16,d7
  398.  move.w #0,d1
  399.  move.w (a0)+,d2
  400.  move.w (a0)+,d5
  401.  bra backfromtst
  402. NotGoBackUp:
  403.  
  404.  
  405.  move.w (a0)+,d2    ; conditions
  406.  and.w Conditions,d2
  407.  
  408.  cmp.w -2(a0),d2
  409.  beq.s satisfied 
  410.  
  411.  move.w (a0)+,d5
  412.  
  413. dothesimplething:
  414.  move.l FloorLines,a3
  415. simplecheck:
  416.  move.w (a0)+,d5
  417.  blt nomoredoorwalls
  418.  asl.w #4,d5
  419.  lea (a3,d5.w),a4
  420.  move.w #0,14(a4)
  421.  move.l (a0)+,a1
  422.  add.l #LEVELGRAPHICS,a1
  423.  move.l (a0)+,a2
  424.  adda.w d0,a2
  425.  move.l a2,10(a1)
  426.  move.l d3,24(a1)
  427.  bra.s simplecheck
  428.  bra nomoredoorwalls 
  429.  
  430.  
  431. satisfied:
  432.  
  433.  moveq #0,d4
  434.  moveq #0,d5
  435.  move.b (a0)+,d5
  436.  move.b (a0)+,d4
  437.  tst.b dooropen
  438.  bne tstdoortoclose
  439.  tst.b doorclosed
  440.  bne tstdoortoopen
  441.  move.w #$ffff,d1
  442.  
  443. backfromtst:
  444.  
  445.  move.l FloorLines,a3
  446.  
  447. doorwalls:
  448.  move.w (a0)+,d5
  449.  blt.s nomoredoorwalls
  450.  asl.w #4,d5
  451.  lea (a3,d5.w),a4
  452.  move.w 14(a4),d4
  453.  move.w #0,14(a4)
  454.  and.w d1,d4
  455.  cmp.w d1,d4
  456.  bne.s nothinghit
  457.  move.w d7,(a5)
  458.  move.w #0,Noisex
  459.  move.w #0,Noisez
  460.  move.w #50,Noisevol
  461.  move.w #5,Samplenum
  462.  move.b #1,chanpick
  463.  st notifplaying
  464.  move.b #$fd,IDNUM
  465.  movem.l a0/a3/d0/d1/d2/d3/d6,-(a7)
  466.  jsr MakeSomeNoise
  467.  movem.l (a7)+,a0/a3/d0/d1/d2/d3/d6
  468. nothinghit:
  469.  move.l (a0)+,a1
  470.  add.l #LEVELGRAPHICS,a1
  471.  move.l (a0)+,a2
  472.  adda.w d0,a2
  473.  move.l a2,10(a1)
  474.  move.l d3,24(a1)
  475.  bra.s doorwalls
  476.  
  477. nomoredoorwalls 
  478.  bra doadoor
  479.  
  480.  rts
  481.  
  482. tstdoortoopen:
  483.  cmp.w #1,d5
  484.  blt.s door0
  485.  beq.s door1
  486.  cmp.w #3,d5
  487.  blt.s door2
  488.  beq.s door3
  489.  cmp.w #5,d5
  490.  blt.s door4
  491.  beq.s door5
  492.  
  493. door0:
  494.  tst.b SPCTAP
  495.  bne.s door1
  496.  move.w #$ffff,d1
  497.  bra backfromtst
  498.  
  499. door1:
  500.  move.w #%100000000,d1
  501.  move.w #-16,d7
  502.  bra backfromtst
  503.  
  504. door2:
  505.  move.w #%10000000000,d1
  506.  move.w #-16,d7
  507.  bra backfromtst
  508.  
  509. door3:
  510.  move.w #%1000000000,d1
  511.  move.w #-16,d7
  512.  bra backfromtst
  513.  
  514. door4:
  515.  move.w #0,d1
  516.  move.w #-16,d7
  517.  bra backfromtst
  518.  
  519. door5:
  520.  move.w #$ffff,d1
  521.  bra backfromtst
  522.  
  523. tstdoortoclose:
  524.  tst.w d4
  525.  beq.s dclose0
  526.  bra.s dclose1
  527.  
  528. dclose0:
  529.  move.w #4,d7
  530.  move.w #0,d1
  531.  bra backfromtst
  532.  
  533. dclose1:
  534.  move.w #$ffff,d1
  535.  bra backfromtst
  536.  
  537. SLAVESwitchRoutine:
  538.  tst.b SPCTAP
  539.  bne.s SpaceIsPressed
  540.  rts
  541. SpaceIsPressed:
  542.  move.l SwitchData,a0
  543.  move.w #7,d0
  544.  move.l Points,a1
  545.  move.w PLR1_xoff,d1
  546.  move.w PLR1_zoff,d2
  547. CheckSwitches:
  548.  move.w (a0),d3
  549.  blt NotCloseEnough
  550.  move.w 2(a0),d3
  551.  lea (a1,d3.w*4),a2
  552.  move.w (a2),d3
  553.  add.w 4(a2),d3
  554.  asr.w #1,d3
  555.  move.w 2(a2),d4
  556.  add.w 6(a2),d4
  557.  asr.w #1,d4
  558.  sub.w d1,d3
  559.  muls d3,d3
  560.  sub.w d2,d4
  561.  muls d4,d4
  562.  add.l d3,d4
  563.  cmp.l #60*60,d4
  564.  bge NotCloseEnough
  565.  move.l 4(a0),a3
  566.  add.l #LEVELGRAPHICS,a3
  567.  move.w 2(a3),d3
  568.  and.w #%1111000000111111,d3
  569.  not.b 8(a0)
  570.  beq.s switchoff
  571.  or.w #32*64,d3
  572. switchoff: 
  573.  move.w d3,2(a3)
  574.  move.w #7,d3
  575.  sub.w d0,d3
  576.  addq #4,d3
  577.  move.w Conditions,d4
  578.  bchg d3,d4
  579.  move.w d4,Conditions
  580.  movem.l a0/a1/d0,-(a7)
  581.  move.w #0,Noisex
  582.  move.w #0,Noisez
  583.  move.w #50,Noisevol
  584.  move.w #10,Samplenum
  585.  move.b #1,chanpick
  586.  st notifplaying
  587.  move.b #$fc,IDNUM
  588.  movem.l a0/a3/d0/d1/d2/d3/d6,-(a7)
  589.  jsr MakeSomeNoise
  590.  movem.l (a7)+,a0/a3/d0/d1/d2/d3/d6
  591.  
  592.  movem.l (a7)+,a0/a1/d0
  593.  
  594. NotCloseEnough:
  595.  adda.w #12,a0
  596.  dbra d0,CheckSwitches
  597.  rts
  598.  
  599. prot1: dc.w 0
  600.   
  601. tempGotBigGun: dc.w 0 
  602. tempGunDamage: dc.w 0
  603. tempGunNoise: dc.w 1
  604. tempxoff: dc.w 0
  605. tempzoff: dc.w 0
  606. tempRoompt: dc.l 0
  607.  
  608. PLR1_GotBigGun: dc.w 0
  609. PLR1_GunDamage: dc.w 0
  610. PLR1_GunNoise: dc.w 0
  611. PLR2_GotBigGun: dc.w 0
  612. PLR2_GunDamage: dc.w 0
  613. PLR2_GunNoise: dc.w 0
  614. bulyspd: dc.w 0 
  615. closedist: dc.w 0
  616.  
  617. ObsInLine:
  618.  ds.b 400 
  619.  
  620. rotcount:
  621.  dc.w 0
  622.  
  623. shotvels: ds.l 20
  624.  
  625. PLR1_clicked: dc.b 0
  626. PLR2_clicked: dc.b 0
  627. popping: ds.l 5*4
  628. targetydiff: dc.l 0
  629. TimeToShoot: dc.w 0
  630.  
  631. tempangpos: dc.w 0
  632. tempxdir: dc.w 0
  633. tempzdir: dc.w 0
  634.  
  635.  
  636. GunFrame: dc.w 0
  637.  
  638. duh: dc.w 0
  639. double: dc.w 0
  640. ivescreamed: dc.w 0
  641.  
  642. putinbackdrop:
  643.  
  644.  move.l a0,-(a7)
  645.  
  646.  move.w PLR1_angpos,d5
  647.  and.w #8191,d5
  648.  muls #432,d5
  649.  divs #8192,d5
  650.  muls #38*2,d5
  651.  
  652.  CACHE_ON d1
  653.  
  654.  move.l frompt,a0
  655.  adda.w #104*4,a0
  656.  move.l #EndBackPicture,a3
  657.  lea.l BackPicture,a1
  658.  add.l d5,a1
  659.  move.w #2,d4
  660.  bra allbars
  661.  cnop 0,32
  662. allbars:
  663.  move.w #31,d3
  664. onebar:
  665. vertline:    
  666. val SET 0
  667.  
  668.  REPT 19
  669.  move.l (a1)+,d0
  670.  move.w d0,val+104*4(a0)
  671.  swap d0
  672.  move.w d0,val(a0)
  673. val SET val+104*8
  674.  ENDR
  675.  
  676.  cmp.l a3,a1
  677.  blt.s notoffrightend
  678.  move.l #BackPicture,a1
  679. notoffrightend:
  680.  
  681.  addq #4,a0
  682.  dbra d3,onebar
  683.  addq #4,a0
  684.  dbra d4,allbars
  685.  
  686.  move.l (a7)+,a0
  687.  rts
  688.  
  689.  
  690.  
  691.  
  692.  
  693.